#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

// 带头双向循环链表
typedef int LTDataType;

 typedef struct List
{
	LTDataType data;
	struct List* next;
	struct List* prev;
}LTNode;

 // 双链表初始化,在插入数据之前要先初始化一个哨兵位
 //void LTInit(LTNode** pphead);
 LTNode* LTInit();
 void LTDesTroy(LTNode** pphead);

 // 当链表中只有哨兵位节点的时候，就为空链表，
 // 即不能对哨兵位进行任何操作【不能改值，不能删除】
 // 不需要改变哨兵位，则不需要传二级指针
 void LTPushBack(LTNode* phead, LTDataType x);
 void LTPushFront(LTNode* phead, LTDataType x);

 // 头删、尾删
 void LTPopBack(LTNode* phead);
 void LTPopFront(LTNode* phead);

 void PrintList(LTNode* phead);

 LTNode* LTFind(LTNode* phead, LTDataType x);

// 在指定位置pos之后插入数据
void LTInsert(LTNode* pos, LTDataType x);

void LTErase(LTNode* pos);

LTNode* LTFind(LTNode* phead, LTDataType x);

